package week2nd;

import java.util.Scanner;
import java.util.Stack;

public class PP4_2 {
    private final static char ADD = '+';
    private final static char SUBTRACT = '-';
    private final static char MULTIPLY = '*';
    private final static char DIVIDE = '/';

    private LinkedStack<Integer> stack;
    public PP4_2(){
        stack = new LinkedStack<Integer>();
    }
    public int evaluate(String expr){
        int op1, op2, result = 0;
        String token;
        Scanner parser = new Scanner(expr);

        while(parser.hasNext()){
            token = parser.next();

            if(isOperator(token)){
                op2 = (stack.pop()).intValue();
                op1 = (stack.pop()).intValue();
                result = evaluateSingleOperator(token.charAt(0), op1,op2);
            }else {
                stack.push(Integer.parseInt(token));
            }
        }
        return result;
    }
    private boolean isOperator(String token){
        return(token.equals("+") || token.equals("-") || token.equals("*") || token.equals("/"));
    }
    private int evaluateSingleOperator(char operator, int op1, int op2){
        int result = 0;

        switch (operator){
            case ADD:
                result = op1 + op2;
                break;
            case SUBTRACT:
                result = op1 - op2;
                break;
            case MULTIPLY:
                result = op1 * op2;
                break;
            case DIVIDE:
                result = op1 / op2;
        }
        return result;
    }
}
